package com.company;

public class Main {

    /**
     * java基础语法测试类
     *
     * @author yuw
     */
        public static void main(String[] args) {
            // java数据类型测试
            test01();
            System.out.println("=================================================");
            test02();
            System.out.println("=================================================");
            test03();
            System.out.println("=================================================");
            test04();
            System.out.println("=================================================");
            test05();

        }

        /**
         * 运算符：逻辑运算短路
         */
        public static void test05() {
            // 验证逻辑运算短路
            int iVal1 = 1;
            int iVal2 = 2;
            int iVal3 = 3;
            int iVal4 = 4;
            boolean isOk = iVal1++ >= iVal2-- && iVal3++ <= --iVal4; // 如果 iVal3 = 3 iVal4=4 则说明 && 后面没有进行运算
            System.out.println("isOK=" + isOk);
            System.out.println("iVal1=" + iVal1);
            System.out.println("iVal2=" + iVal2);
            System.out.println("iVal3=" + iVal3);
            System.out.println("iVal4=" + iVal4);
        }

        /**
         * 运算符：自增自减算符
         */
        public static void test04() {
            int iVal1 = 1;
            int iVal2 = 2;

            // 运算
            int iVal3 = ++iVal1 + iVal2--;
            System.out.println("iVal1=" + iVal1);
            System.out.println("iVal2=" + iVal2);
            System.out.println("iVal3=" + iVal3);
        }

        /**
         * 运算符：位运算符
         */
        public static void test03() {
            int iVal0 = 1; // 0000 0001
            int iVal1 = ~iVal0; // 1111 1110 [补码--计算机] --> [原码--人] 1000 0010  -2
            System.out.println("iVal1=" + iVal1);

            int iVal11 = -128;
            int iVal12 = iVal11 >>> 2;
            int iVal13 = iVal11 << 2;
            System.out.println("iVal12=" + iVal12);
            System.out.println("iVal13=" + iVal13);
        }

        /**
         * 运算符：算术运算符
         */
        public static void test02() {
            int iVal0 = 5;
            int iVal1 = 3;
            int iVal2 = iVal0 / iVal1; // 1  1.66 小数部分被舍弃
            System.out.println("iVal0 / iVal1=" + iVal2);
            System.out.println("--------保留小数点--------");
            double iVal3 = iVal0 * 1.0 / iVal1; // 1  1.66 小数部分被舍弃
            System.out.println("iVal0 / iVal1=" + iVal3);
        }

        /**
         * java数据类型
         */
        public static void test01() {
            // 声明变量、初始化
            int val0 = 1;
            byte bVal0 = 1;
            short sVal0 = 2;
            char chVal = 92;
            short sVal1 = 2;
            // 如果一个表达式中有 char byte short 三种类型及其组合，则表达式的运行结果的类型为int
            int iVal = bVal0 + sVal0 + chVal;
            // 两个short类型的运算结果是int类型；同理两个char 或者两个 byte 类型的运算结果也是int类型；
            int sVal2 = sVal0 + sVal1;

            int iVal3 = 100;
            // 整数的默认类型为int类型，如果类型时 byte char short 时，整数的大小在类型的表示范围只能，则不需要强制类型转换，
            // 如果在类型的表示范围之外，则需要进行强制类型转换；
            byte sVal4 = (byte) 128;

            long iVal4 = 100000000000L;

            int iVal5 = sVal0;

            sVal0 = (short) iVal5;

            System.out.println("-----------------------");
            // long和float类型，那个类型表示的范围大？ float范围大。为什么？
            // 需要使用包装类类型，后面讲完面向对象之后再讲
            System.out.println("long类型的最大值：" + Long.MAX_VALUE);
            System.out.println("float类型的最大值：" + Float.MAX_VALUE);

            System.out.println("---------------------------");
            char c = 'A';    // 大写字母
            int num = c;    // 需要将字符变为int型才可以使用加法计算
            num = num + ('a' - 'A');    // 变为小写字母的编码
            c = (char) num;    // 将int变为char型
            System.out.println(c);

        }
}
